home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / gnu / djgpp / contrib / dvx / inc / x11 / xlibos.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-15  |  8.4 KB  |  297 lines

  1. /*
  2.  * $XConsortium: Xlibos.h,v 1.23 89/12/18 13:44:00 rws Exp $
  3.  *
  4.  * Xlib networking include files for UNIX Systems.
  5.  */
  6.  
  7. #ifdef att
  8. /*
  9.  * UNIX System V Release 3.2
  10.  */
  11. #include <sys/stropts.h>
  12. #define BytesReadable(fd,ptr) (_XBytesReadable ((fd), (ptr)))
  13. #define MALLOC_0_RETURNS_NULL
  14. #include <sys/param.h>
  15. #define MAXSOCKS (NOFILES_MAX)
  16. #define MSKCNT ((MAXSOCKS + 31) / 32)
  17.  
  18. #else
  19. #ifdef MSDOS
  20. /* Special case for MSDOS/PCDOS. 90/06/18 POHC */
  21. /*#include <sys/ioctl.h>
  22. #include <netdb.h> POHC 91/01/28 */
  23. #include <sys/time.h>
  24. #include <sys/uio.h>
  25. #include <sys/socket.h>
  26. #include <sys/param.h> /* needed for XConnDis.c */
  27. #ifdef __BCC__ /* JDC 92/08/11 */
  28. #define BytesReadable(fd, ptr) so_ioctl ((fd), FIONREAD, (long *)(ptr))
  29. #else
  30. #define BytesReadable(fd, ptr) ioctl ((fd), FIONREAD, (long *)(ptr))
  31. #endif
  32. #ifndef NOFILE /* POHC 91/01/09 */
  33. #ifdef FOPEN_MAX /* POHC */
  34. #define NOFILE FOPEN_MAX
  35. #else /* FOPEN_MAX */
  36. #define NOFILE 20
  37. #endif /* FOPEN_MAX */
  38. #endif /* NOFILE */
  39. #define MSKCNT ((NOFILE + 31) / 32)    /* size of bit array */
  40. #if defined(__WATCOMC__) || defined(__NDPC__)
  41. #define MALLOC_0_RETURNS_NULL
  42. #endif
  43. #else /* !MSDOS */
  44. /*
  45.  * 4.2BSD-based systems
  46.  */
  47. #include <netinet/in.h>
  48. #include <sys/ioctl.h>
  49. #include <netdb.h>
  50. #include <sys/uio.h>    /* needed for XlibInt.c */
  51. #include <sys/param.h> /* needed for XConnDis.c */
  52.  
  53. #define BytesReadable(fd, ptr) ioctl ((fd), FIONREAD, (ptr))
  54. #define MSKCNT ((NOFILE + 31) / 32)    /* size of bit array */
  55. #endif /* MSDOS */
  56. #endif /* att else bsdish */
  57.  
  58.  
  59. /* Utek leaves kernel macros around in include files (bleah) */
  60. #ifdef dirty
  61. #undef dirty
  62. #endif
  63.  
  64. #ifdef CRAY
  65. #define WORD64
  66. #define MALLOC_0_RETURNS_NULL
  67. #endif
  68.  
  69. #if (MSKCNT==1)
  70. #define BITMASK(i) (1 << (i))
  71. #define MASKIDX(i) 0
  72. #endif
  73. #if (MSKCNT>1)
  74. #define BITMASK(i) (1 << ((i) & 31))
  75. #define MASKIDX(i) ((i) >> 5)
  76. #endif
  77.  
  78. #define MASKWORD(buf, i) buf[MASKIDX(i)]
  79. #define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i)
  80. #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
  81. #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
  82.  
  83. #if (MSKCNT==1)
  84. #define COPYBITS(src, dst) dst[0] = src[0]
  85. #define CLEARBITS(buf) buf[0] = 0
  86. #define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0])
  87. #define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0])
  88. #define UNSETBITS(dst, b1) (dst[0] &= ~b1[0])
  89. #define ANYSET(src) (src[0])
  90. #endif
  91. #if (MSKCNT==2)
  92. #define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; }
  93. #define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; }
  94. #define MASKANDSETBITS(dst, b1, b2)  {\
  95.               dst[0] = (b1[0] & b2[0]);\
  96.               dst[1] = (b1[1] & b2[1]); }
  97. #define ORBITS(dst, b1, b2)  {\
  98.               dst[0] = (b1[0] | b2[0]);\
  99.               dst[1] = (b1[1] | b2[1]); }
  100. #define UNSETBITS(dst, b1) {\
  101.                       dst[0] &= ~b1[0]; \
  102.                       dst[1] &= ~b1[1]; }
  103. #define ANYSET(src) (src[0] || src[1])
  104. #endif
  105. #if (MSKCNT==3)
  106. #define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; \
  107.                  dst[2] = src[2]; }
  108. #define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; buf[2] = 0; }
  109. #define MASKANDSETBITS(dst, b1, b2)  {\
  110.               dst[0] = (b1[0] & b2[0]);\
  111.               dst[1] = (b1[1] & b2[1]);\
  112.               dst[2] = (b1[2] & b2[2]); }
  113. #define ORBITS(dst, b1, b2)  {\
  114.               dst[0] = (b1[0] | b2[0]);\
  115.               dst[1] = (b1[1] | b2[1]);\
  116.               dst[2] = (b1[2] | b2[2]); }
  117. #define UNSETBITS(dst, b1) {\
  118.                       dst[0] &= ~b1[0]; \
  119.                       dst[1] &= ~b1[1]; \
  120.                       dst[2] &= ~b1[2]; }
  121. #define ANYSET(src) (src[0] || src[1] || src[2])
  122. #endif
  123. #if (MSKCNT==4)
  124. #define COPYBITS(src, dst) dst[0] = src[0]; dst[1] = src[1]; \
  125.                dst[2] = src[2]; dst[3] = src[3]
  126. #define CLEARBITS(buf) buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0
  127. #define MASKANDSETBITS(dst, b1, b2)  \
  128.                       dst[0] = (b1[0] & b2[0]);\
  129.                       dst[1] = (b1[1] & b2[1]);\
  130.                       dst[2] = (b1[2] & b2[2]);\
  131.                       dst[3] = (b1[3] & b2[3])
  132. #define ORBITS(dst, b1, b2)  \
  133.                       dst[0] = (b1[0] | b2[0]);\
  134.                       dst[1] = (b1[1] | b2[1]);\
  135.                       dst[2] = (b1[2] | b2[2]);\
  136.                       dst[3] = (b1[3] | b2[3])
  137. #define UNSETBITS(dst, b1) \
  138.                       dst[0] &= ~b1[0]; \
  139.                       dst[1] &= ~b1[1]; \
  140.                       dst[2] &= ~b1[2]; \
  141.                       dst[3] &= ~b1[3]
  142. #define ANYSET(src) (src[0] || src[1] || src[2] || src[3])
  143. #endif
  144.  
  145. #if (MSKCNT>4)
  146. #define COPYBITS(src, dst) bcopy((caddr_t) src, (caddr_t) dst,\
  147.                  MSKCNT*sizeof(long))
  148. #define CLEARBITS(buf) bzero((caddr_t) buf, MSKCNT*sizeof(long))
  149. #define MASKANDSETBITS(dst, b1, b2)  \
  150.               { int cri;            \
  151.             for (cri=0; cri<MSKCNT; cri++)    \
  152.                   dst[cri] = (b1[cri] & b2[cri]) }
  153. #define ORBITS(dst, b1, b2)  \
  154.               { int cri;            \
  155.               for (cri=0; cri<MSKCNT; cri++)    \
  156.                   dst[cri] = (b1[cri] | b2[cri]) }
  157. #define UNSETBITS(dst, b1) \
  158.               { int cri;            \
  159.               for (cri=0; cri<MSKCNT; cri++)    \
  160.                   dst[cri] &= ~b1[cri];  }
  161. /*
  162.  * If MSKCNT>4, then ANYSET is a routine defined in XlibInt.c.
  163.  *
  164.  * #define ANYSET(src) (src[0] || src[1] || src[2] || src[3] || src[4] ...)
  165.  */
  166. #endif
  167.  
  168. #ifdef sgi
  169. #include <malloc.h>
  170. #include <string.h>
  171. #else
  172. #ifdef MSDOS /* POHC */
  173. #include <stdlib.h>
  174. #else
  175. char *malloc(), *realloc(), *calloc();
  176. void free();
  177. char *strncpy(), *strncat();
  178. void perror();
  179. void exit();
  180. #endif
  181. #endif
  182.  
  183. #ifndef MSDOS /* 90/06/22 POHC */
  184. void bcopy();
  185. #endif
  186.  
  187. /*
  188.  * The following definitions can be used for locking requests in multi-threaded
  189.  * address spaces.
  190.  */
  191. #define LockDisplay(dis)
  192. #define LockMutex(mutex)
  193. #define UnlockMutex(mutex)
  194. #define UnlockDisplay(dis)
  195. #define Xfree(ptr) free((ptr))
  196.  
  197.  
  198. /*
  199.  * Note that some machines do not return a valid pointer for malloc(0), in
  200.  * which case we provide an alternate under the control of the
  201.  * define MALLOC_0_RETURNS_NULL.  This is necessary because some
  202.  * Xlib code expects malloc(0) to return a valid pointer to storage.
  203.  */
  204. #ifdef MALLOC_0_RETURNS_NULL
  205.  
  206. # define Xmalloc(size) malloc(((size) > 0 ? (size) : 1))
  207. # define Xrealloc(ptr, size) realloc((ptr), ((size) > 0 ? (size) : 1))
  208. # define Xcalloc(nelem, elsize) calloc(((nelem) > 0 ? (nelem) : 1), (elsize))
  209.  
  210. #else
  211.  
  212. # define Xmalloc(size) malloc((size))
  213. # define Xrealloc(ptr, size) realloc((ptr), (size))
  214. # define Xcalloc(nelem, elsize) calloc((nelem), (elsize))
  215.  
  216. #endif
  217.  
  218.  
  219. /*
  220.  *    ReadvFromServer and WritevToSever use struct iovec, normally found
  221.  *    in Berkeley systems in <sys/uio.h>.  See the readv(2) and writev(2)
  222.  *    manual pages for details.
  223.  *
  224.  *    struct iovec {
  225.  *        caddr_t iov_base;
  226.  *        int iov_len;
  227.  *    };
  228.  */
  229. #ifndef _CADDR_T_DEF_
  230. #ifndef __NDPC__
  231. typedef char *      caddr_t;
  232. #endif
  233. #define _CADDR_T_DEF_ /* MJCR/POHC 91/04/24 */
  234. #endif
  235.  
  236. #if defined(USG)
  237. #if !defined(CRAY) && !defined(umips)
  238. struct iovec {
  239.     caddr_t iov_base;
  240.     int iov_len;
  241. };
  242. #ifndef __TIMEVAL__
  243. #define __TIMEVAL__
  244. struct timeval {            /* BSD has in <sys/time.h> */
  245.     long tv_sec;
  246.     long tv_usec;
  247. };
  248. #endif /* __TIMEVAL__ */
  249. #endif /* not CRAY or umips */
  250. #endif /* USG */
  251.  
  252.  
  253. #ifdef STREAMSCONN
  254. #include "Xstreams.h"
  255.  
  256. #if (!defined(EWOULDBLOCK)) && defined(EAGAIN)
  257. #define EWOULDBLOCK EAGAIN
  258. #endif
  259.  
  260. extern char _XsTypeOfStream[];
  261. extern Xstream _XsStream[];
  262.  
  263. #define ReadFromServer(dpy, data, size) \
  264.     (*_XsStream[_XsTypeOfStream[dpy]].ReadFromStream)((dpy), (data), (size), \
  265.                              BUFFERING)
  266. #define WriteToServer(dpy, bufind, size) \
  267.     (*_XsStream[_XsTypeOfStream[dpy]].WriteToStream)((dpy), (bufind), (size))
  268.  
  269. #else /* else not STREAMSCONN */
  270.  
  271. /*
  272.  * bsd can read from sockets directly
  273.  */
  274. #define ReadFromServer(dpy, data, size) recv((dpy), (data), (size), 0) /* was read 90/07/05 POHC */
  275. #define WriteToServer(dpy, bufind, size) send((dpy), (bufind), (size), 0) /* was write 90/07/05 POHC */
  276.  
  277. #endif /* STREAMSCONN */
  278.  
  279.  
  280. #ifndef USG
  281. #ifndef MSDOS /* POHC */
  282. #define _XReadV readv
  283. #define _XWriteV writev
  284. #else /* MSDOS */
  285. #define _XReadV recvv
  286. #define _XWriteV sendv
  287. #endif /* MSDOS */
  288. #endif
  289.  
  290. #define ReadvFromServer(dpy, iov, iovcnt) _XReadV((dpy), (iov), (iovcnt))
  291. #define WritevToServer(dpy, iov, iovcnt) _XWriteV((dpy), (iov), (iovcnt))
  292.  
  293. #if !defined(sgi) && !defined(MSDOS) /* 90/06/25 POHC */
  294. extern char *index();
  295. #endif
  296. #define SearchString(string, char) index((string), (char))
  297.